-- $LastChangedDate: 2007-06-01 02:52:33 +0200 (Fri, 01 Jun 2007) $
-- $LastChangedRevision: 149 $
-- $LastChangedBy: vicente $

-- packages de ada

SEPARATE (Tareas.Gmonitores)

   -- calcular la tabla de ejercicios para un cliente durante la entrevista
PROCEDURE Calcular_Tabla_Ejercicios (
      Cliente : IN     Datosclienteptr;
      Tabla   : IN OUT Listas.Tabla_Ejercicios_Lists.List_Type) IS
   Numero_Ejercicios : Integer;
   It                : Listas.Tabla_Ejercicios_Lists.List_Iterator;
   I                 : Integer;
   -- constantes para el numero de ejercicios
   Ejercicios_Adolescente : CONSTANT Integer := 8;
   Ejercicios_Adulto      : CONSTANT Integer := 5;
   Ejercicios_Anciano     : CONSTANT Integer := 3;
BEGIN
   NULL;
   -- En base a las caracteristicas del cliente contenidas en sus datos de cliente
   -- elaborar una tabla de ejercicios apropiada, tanto en numero como en tipo, de
   -- ejercicios.
   -- Precondicion: El numero de ejercicios posibles debe ser mayor que la constante de tipo ejercicios_X
   -- Postcondicion: Obtenemos una tabla de ejercicios que no contiene ningun ejercicio
   -- repetido.

   CASE Cliente.Edad IS
      WHEN Adolescente =>
         Numero_Ejercicios := Ejercicios_Adolescente;
      WHEN Adulto =>
         Numero_Ejercicios := Ejercicios_Adulto;
      WHEN Anciano =>
         Numero_Ejercicios := Ejercicios_Anciano;
      WHEN OTHERS =>
         NULL;
   END CASE;

   -- insertamos los ejercicios en funcion de la edad
   I:= Numero_Ejercicios;
   It := Listas.Tabla_Ejercicios_Lists.Last(Tabla);
   WHILE I > 0 LOOP
      Listas.Tabla_Ejercicios_Lists.Insert(It, Ejerciciotype'Val (Numero_Ejercicios - I));
      It := Listas.Tabla_Ejercicios_Lists.Last(Tabla);
      I:= I - 1;
   END LOOP;

END Calcular_Tabla_Ejercicios;
